package com.yizisu.mvvmlib.doc

import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import androidx.annotation.StyleRes
import com.yizisu.basemvvm.mvvm.MvvmDialog
import com.yizisu.basemvvm.mvvm.mvvm_helper.LiveBeanStatus

class BaseDialog : MvvmDialog() {
    /**
     * 最后会被setContent()调用
     */
    override fun getLayoutResOrView(inflater: LayoutInflater): Any? = FrameLayout(appCompatActivity!!)

    /**
     * 最后会被setContent()调用
     */
//    override fun getLayoutResOrView(): Any? =R.layout.activity


    /**
     * 在onCreate()中被回调
     * 做一些与viewModel相关的事件
     * 可以注册一些liveData监听
     */
    override fun initViewModel() {
    }

    /**
     * 在onCreate()中被回调
     * 此时已经执行完setContent()方法
     * 做一些与Ui相关的事情
     */
    override fun initUi(savedInstanceState: Bundle?) {
    }

    /**
     * 在onCreate()中被回调
     * 可以处理一些数据
     */
    override fun initData() {
    }

    /**
     * 注册需要点击的view
     * 在onSingleClick(view: View)会被回调
     */
    override fun getClickView(): List<View?>? = null

    /**
     * 在getClickView(): List<View?>?注册的view
     * 点击会在这这个方法回调
     */
    override fun onSingleClick(view: View) {
    }

    /**
     * 布局你的view显示参数，可以是位置，大小，内外边距
     */
    override fun onRootViewLayoutParams(lp: FrameLayout.LayoutParams) {
        super.onRootViewLayoutParams(lp)
    }

    /**
     * MessageBus发送的消息会在这里回调
     */
    override fun onMessageBus(event: Any?, code: Int) {
        super.onMessageBus(event, code)
    }

    /**
     * 获取两次view的是点击时间间隔
     * 少于这个时间多次点击只相应一次
     * 默认300毫秒
     */
    override fun getDoubleClickSpace(): Long {
        return super.getDoubleClickSpace()
    }

    /**
     * 设置对话框背景透明度
     * 0-1,默认0.6
     */
    override fun getDialogDimAmount(): Float {
        return super.getDialogDimAmount()
    }

    /**
     * 触摸外面是否可以取消
     * 默认不可以
     */
    override fun isCanceledOnTouchOutside(): Boolean {
        return super.isCanceledOnTouchOutside()
    }

    /**
     * 设置对话框进入退出动画
     */
    @StyleRes
    override fun getDialogAnim(): Int? {
        return super.getDialogAnim()
    }

    /**
     * 是否需要默认,进入退出动画
     * 默认需要
     */
    override fun isNeedDefaultAnim(): Boolean {
        return super.isNeedDefaultAnim()
    }

    /**
     * 这里列举所有可以调用的方法
     */
    fun otherFun() {
        //获取当前的activity
        val currentActivity = appCompatActivity

        //获取当前activity创建的viewModel实例，与activity共享
        val activityViewModel = getActivityViewModel<BaseViewModel>()

        //创建自己的viewModel,可以多次调用，也可以传入不同泛型
        val viewModel = getViewModel<BaseViewModel>()

        //对liveData进行监听，每次赋值这里会回调
        viewModel.testLiveBean.register {
            when (it.status) {
                LiveBeanStatus.START -> {
                    //调用 testLiveBean.start() 这里会回调
                }
                LiveBeanStatus.SUCCESS -> {
                    //调用 testLiveBean.success("这里给liveData赋值") 这里会回调
                }
                LiveBeanStatus.FAIL -> {
                    //调用 testLiveBean.fail("错误信息")这里会回调
                }
            }
        }

        //对liveData进行监听，只有调用 success("这里给liveData赋值") 才会回调
        viewModel.testMediatorLiveBean.registerOnSuccess {
            //调用 testMediatorLiveBean.success("这里给liveData赋值") 这里会回调
        }
    }
}